public class text {


      public class ListNode {
          int val;
          ListNode next;
          ListNode() {}
          ListNode(int val) { this.val = val; }
          ListNode(int val, ListNode next) { this.val = val; this.next = next; }
      }


    class Solution {
        public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
            ListNode dummy = new ListNode(0); // 哑节点，简化边界处理
            ListNode current = dummy;
            int carry = 0; // 进位

            // 遍历两个链表，直到都为空且没有进位
            while (l1 != null || l2 != null || carry != 0) {
                // 获取当前节点的值，如果节点为空则为0
                int val1 = (l1 != null) ? l1.val : 0;
                int val2 = (l2 != null) ? l2.val : 0;

                // 计算当前位的和（包括进位）
                int sum = val1 + val2 + carry;

                // 计算当前位的值和新的进位
                int digit = sum % 10;
                carry = sum / 10;

                // 创建新节点
                current.next = new ListNode(digit);
                current = current.next;

                // 移动到下一个节点
                if (l1 != null) l1 = l1.next;
                if (l2 != null) l2 = l2.next;
            }

            return dummy.next; // 返回结果链表的头节点
        }
    }

}
